// SPDX-License-Identifier: Apache-2.0
/*
 * Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * Portions Copyright (c) 2022 Tino Reichardt <milky-zfs@mcmilk.de>
 * - modified assembly to fit into OpenZFS
 */

#if (defined(__PPC64__) && defined(__BIG_ENDIAN__))

#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.text

.globl	zfs_sha512_power8
.globl	.zfs_sha512_power8
.type	zfs_sha512_power8,@function
.section	".opd","aw"
.align	3
zfs_sha512_power8:
.quad	.zfs_sha512_power8,.TOC.@tocbase,0
.previous
.align	6
.zfs_sha512_power8:
#else
.abiversion	2
.text

.globl	zfs_sha512_power8
.type	zfs_sha512_power8,@function
.align	6
zfs_sha512_power8:
.localentry	zfs_sha512_power8,0
#endif

	stdu	1,-384(1)
	mflr	8
	li	10,207
	li	11,223
	stvx	24,10,1
	addi	10,10,32
	mfspr	12,256
	stvx	25,11,1
	addi	11,11,32
	stvx	26,10,1
	addi	10,10,32
	stvx	27,11,1
	addi	11,11,32
	stvx	28,10,1
	addi	10,10,32
	stvx	29,11,1
	addi	11,11,32
	stvx	30,10,1
	stvx	31,11,1
	li	11,-4096+255
	stw	12,332(1)
	li	10,0x10
	std	26,336(1)
	li	26,0x20
	std	27,344(1)
	li	27,0x30
	std	28,352(1)
	li	28,0x40
	std	29,360(1)
	li	29,0x50
	std	30,368(1)
	li	30,0x60
	std	31,376(1)
	li	31,0x70
	std	8,400(1)
	mtspr	256,11

	bl	.LPICmeup
	addi	11,1,79
	.long	0x7C001E99
	.long	0x7C4A1E99
	.long	0x7C9A1E99
	vsldoi	1,0,0,8
	.long	0x7CDB1E99
	vsldoi	3,2,2,8
	vsldoi	5,4,4,8
	vsldoi	7,6,6,8
	li	0,4
	b	.Loop
.align	5
.Loop:
	lvx	28,0,6
	.long	0x7D002699
	addi	4,4,16
	mr	7,6
	stvx	0,0,11
	stvx	1,10,11
	stvx	2,26,11
	stvx	3,27,11
	stvx	4,28,11
	stvx	5,29,11
	stvx	6,30,11
	stvx	7,31,11
	.long	0x10E7E0C0
	lvx	28,10,6
	.long	0x10E740C0
	vsel	29,6,5,4
	.long	0x10C6E0C0
	.long	0x10E7E8C0
	.long	0x13C4FEC2
	.long	0x10E7F0C0
	vxor	29,0,1
	vsel	29,1,2,29
	.long	0x106338C0
	.long	0x13C086C2
	.long	0x13DEE8C0
	.long	0x10E7F0C0
	lvx	28,26,7
	.long	0x7D402699
	addi	4,4,16
	vsldoi	9,8,8,8
	.long	0x10C648C0
	vsel	29,5,4,3
	.long	0x10A5E0C0
	.long	0x10C6E8C0
	.long	0x13C3FEC2
	.long	0x10C6F0C0
	vxor	29,7,0
	vsel	29,0,1,29
	.long	0x104230C0
	.long	0x13C786C2
	.long	0x13DEE8C0
	.long	0x10C6F0C0
	lvx	28,27,7
	.long	0x10A550C0
	vsel	29,4,3,2
	.long	0x1084E0C0
	.long	0x10A5E8C0
	.long	0x13C2FEC2
	.long	0x10A5F0C0
	vxor	29,6,7
	vsel	29,7,0,29
	.long	0x102128C0
	.long	0x13C686C2
	.long	0x13DEE8C0
	.long	0x10A5F0C0
	lvx	28,28,7
	.long	0x7D802699
	addi	4,4,16
	vsldoi	11,10,10,8
	.long	0x108458C0
	vsel	29,3,2,1
	.long	0x1063E0C0
	.long	0x1084E8C0
	.long	0x13C1FEC2
	.long	0x1084F0C0
	vxor	29,5,6
	vsel	29,6,7,29
	.long	0x100020C0
	.long	0x13C586C2
	.long	0x13DEE8C0
	.long	0x1084F0C0
	lvx	28,29,7
	.long	0x106360C0
	vsel	29,2,1,0
	.long	0x1042E0C0
	.long	0x1063E8C0
	.long	0x13C0FEC2
	.long	0x1063F0C0
	vxor	29,4,5
	vsel	29,5,6,29
	.long	0x10E718C0
	.long	0x13C486C2
	.long	0x13DEE8C0
	.long	0x1063F0C0
	lvx	28,30,7
	.long	0x7DC02699
	addi	4,4,16
	vsldoi	13,12,12,8
	.long	0x104268C0
	vsel	29,1,0,7
	.long	0x1021E0C0
	.long	0x1042E8C0
	.long	0x13C7FEC2
	.long	0x1042F0C0
	vxor	29,3,4
	vsel	29,4,5,29
	.long	0x10C610C0
	.long	0x13C386C2
	.long	0x13DEE8C0
	.long	0x1042F0C0
	lvx	28,31,7
	addi	7,7,0x80
	.long	0x102170C0
	vsel	29,0,7,6
	.long	0x1000E0C0
	.long	0x1021E8C0
	.long	0x13C6FEC2
	.long	0x1021F0C0
	vxor	29,2,3
	vsel	29,3,4,29
	.long	0x10A508C0
	.long	0x13C286C2
	.long	0x13DEE8C0
	.long	0x1021F0C0
	lvx	28,0,7
	.long	0x7E002699
	addi	4,4,16
	vsldoi	15,14,14,8
	.long	0x100078C0
	vsel	29,7,6,5
	.long	0x10E7E0C0
	.long	0x1000E8C0
	.long	0x13C5FEC2
	.long	0x1000F0C0
	vxor	29,1,2
	vsel	29,2,3,29
	.long	0x108400C0
	.long	0x13C186C2
	.long	0x13DEE8C0
	.long	0x1000F0C0
	lvx	28,10,7
	.long	0x10E780C0
	vsel	29,6,5,4
	.long	0x10C6E0C0
	.long	0x10E7E8C0
	.long	0x13C4FEC2
	.long	0x10E7F0C0
	vxor	29,0,1
	vsel	29,1,2,29
	.long	0x106338C0
	.long	0x13C086C2
	.long	0x13DEE8C0
	.long	0x10E7F0C0
	lvx	28,26,7
	.long	0x7E402699
	addi	4,4,16
	vsldoi	17,16,16,8
	.long	0x10C688C0
	vsel	29,5,4,3
	.long	0x10A5E0C0
	.long	0x10C6E8C0
	.long	0x13C3FEC2
	.long	0x10C6F0C0
	vxor	29,7,0
	vsel	29,0,1,29
	.long	0x104230C0
	.long	0x13C786C2
	.long	0x13DEE8C0
	.long	0x10C6F0C0
	lvx	28,27,7
	.long	0x10A590C0
	vsel	29,4,3,2
	.long	0x1084E0C0
	.long	0x10A5E8C0
	.long	0x13C2FEC2
	.long	0x10A5F0C0
	vxor	29,6,7
	vsel	29,7,0,29
	.long	0x102128C0
	.long	0x13C686C2
	.long	0x13DEE8C0
	.long	0x10A5F0C0
	lvx	28,28,7
	.long	0x7F002699
	addi	4,4,16
	vsldoi	19,18,18,8
	.long	0x108498C0
	vsel	29,3,2,1
	.long	0x1063E0C0
	.long	0x1084E8C0
	.long	0x13C1FEC2
	.long	0x1084F0C0
	vxor	29,5,6
	vsel	29,6,7,29
	.long	0x100020C0
	.long	0x13C586C2
	.long	0x13DEE8C0
	.long	0x1084F0C0
	lvx	28,29,7
	.long	0x1063C0C0
	vsel	29,2,1,0
	.long	0x1042E0C0
	.long	0x1063E8C0
	.long	0x13C0FEC2
	.long	0x1063F0C0
	vxor	29,4,5
	vsel	29,5,6,29
	.long	0x10E718C0
	.long	0x13C486C2
	.long	0x13DEE8C0
	.long	0x1063F0C0
	lvx	28,30,7
	.long	0x7F402699
	addi	4,4,16
	vsldoi	25,24,24,8
	.long	0x1042C8C0
	vsel	29,1,0,7
	.long	0x1021E0C0
	.long	0x1042E8C0
	.long	0x13C7FEC2
	.long	0x1042F0C0
	vxor	29,3,4
	vsel	29,4,5,29
	.long	0x10C610C0
	.long	0x13C386C2
	.long	0x13DEE8C0
	.long	0x1042F0C0
	lvx	28,31,7
	addi	7,7,0x80
	.long	0x1021D0C0
	vsel	29,0,7,6
	.long	0x1000E0C0
	.long	0x1021E8C0
	.long	0x13C6FEC2
	.long	0x1021F0C0
	vxor	29,2,3
	vsel	29,3,4,29
	.long	0x10A508C0
	.long	0x13C286C2
	.long	0x13DEE8C0
	.long	0x1021F0C0
	lvx	28,0,7
	vsldoi	27,26,26,8
	.long	0x13C906C2
	.long	0x1108F0C0
	.long	0x13DA7EC2
	.long	0x1108F0C0
	.long	0x110888C0
	.long	0x1000D8C0
	vsel	29,7,6,5
	.long	0x10E7E0C0
	.long	0x1000E8C0
	.long	0x13C5FEC2
	.long	0x1000F0C0
	vxor	29,1,2
	vsel	29,2,3,29
	.long	0x108400C0
	.long	0x13C186C2
	.long	0x13DEE8C0
	.long	0x1000F0C0
	lvx	28,10,7
	mtctr	0
	b	.L16_xx
.align	5
.L16_xx:
	.long	0x13CA06C2
	.long	0x1129F0C0
	.long	0x13DB7EC2
	.long	0x1129F0C0
	.long	0x112990C0
	.long	0x10E740C0
	vsel	29,6,5,4
	.long	0x10C6E0C0
	.long	0x10E7E8C0
	.long	0x13C4FEC2
	.long	0x10E7F0C0
	vxor	29,0,1
	vsel	29,1,2,29
	.long	0x106338C0
	.long	0x13C086C2
	.long	0x13DEE8C0
	.long	0x10E7F0C0
	lvx	28,26,7
	.long	0x13CB06C2
	.long	0x114AF0C0
	.long	0x13C87EC2
	.long	0x114AF0C0
	.long	0x114A98C0
	.long	0x10C648C0
	vsel	29,5,4,3
	.long	0x10A5E0C0
	.long	0x10C6E8C0
	.long	0x13C3FEC2
	.long	0x10C6F0C0
	vxor	29,7,0
	vsel	29,0,1,29
	.long	0x104230C0
	.long	0x13C786C2
	.long	0x13DEE8C0
	.long	0x10C6F0C0
	lvx	28,27,7
	.long	0x13CC06C2
	.long	0x116BF0C0
	.long	0x13C97EC2
	.long	0x116BF0C0
	.long	0x116BC0C0
	.long	0x10A550C0
	vsel	29,4,3,2
	.long	0x1084E0C0
	.long	0x10A5E8C0
	.long	0x13C2FEC2
	.long	0x10A5F0C0
	vxor	29,6,7
	vsel	29,7,0,29
	.long	0x102128C0
	.long	0x13C686C2
	.long	0x13DEE8C0
	.long	0x10A5F0C0
	lvx	28,28,7
	.long	0x13CD06C2
	.long	0x118CF0C0
	.long	0x13CA7EC2
	.long	0x118CF0C0
	.long	0x118CC8C0
	.long	0x108458C0
	vsel	29,3,2,1
	.long	0x1063E0C0
	.long	0x1084E8C0
	.long	0x13C1FEC2
	.long	0x1084F0C0
	vxor	29,5,6
	vsel	29,6,7,29
	.long	0x100020C0
	.long	0x13C586C2
	.long	0x13DEE8C0
	.long	0x1084F0C0
	lvx	28,29,7
	.long	0x13CE06C2
	.long	0x11ADF0C0
	.long	0x13CB7EC2
	.long	0x11ADF0C0
	.long	0x11ADD0C0
	.long	0x106360C0
	vsel	29,2,1,0
	.long	0x1042E0C0
	.long	0x1063E8C0
	.long	0x13C0FEC2
	.long	0x1063F0C0
	vxor	29,4,5
	vsel	29,5,6,29
	.long	0x10E718C0
	.long	0x13C486C2
	.long	0x13DEE8C0
	.long	0x1063F0C0
	lvx	28,30,7
	.long	0x13CF06C2
	.long	0x11CEF0C0
	.long	0x13CC7EC2
	.long	0x11CEF0C0
	.long	0x11CED8C0
	.long	0x104268C0
	vsel	29,1,0,7
	.long	0x1021E0C0
	.long	0x1042E8C0
	.long	0x13C7FEC2
	.long	0x1042F0C0
	vxor	29,3,4
	vsel	29,4,5,29
	.long	0x10C610C0
	.long	0x13C386C2
	.long	0x13DEE8C0
	.long	0x1042F0C0
	lvx	28,31,7
	addi	7,7,0x80
	.long	0x13D006C2
	.long	0x11EFF0C0
	.long	0x13CD7EC2
	.long	0x11EFF0C0
	.long	0x11EF40C0
	.long	0x102170C0
	vsel	29,0,7,6
	.long	0x1000E0C0
	.long	0x1021E8C0
	.long	0x13C6FEC2
	.long	0x1021F0C0
	vxor	29,2,3
	vsel	29,3,4,29
	.long	0x10A508C0
	.long	0x13C286C2
	.long	0x13DEE8C0
	.long	0x1021F0C0
	lvx	28,0,7
	.long	0x13D106C2
	.long	0x1210F0C0
	.long	0x13CE7EC2
	.long	0x1210F0C0
	.long	0x121048C0
	.long	0x100078C0
	vsel	29,7,6,5
	.long	0x10E7E0C0
	.long	0x1000E8C0
	.long	0x13C5FEC2
	.long	0x1000F0C0
	vxor	29,1,2
	vsel	29,2,3,29
	.long	0x108400C0
	.long	0x13C186C2
	.long	0x13DEE8C0
	.long	0x1000F0C0
	lvx	28,10,7
	.long	0x13D206C2
	.long	0x1231F0C0
	.long	0x13CF7EC2
	.long	0x1231F0C0
	.long	0x123150C0
	.long	0x10E780C0
	vsel	29,6,5,4
	.long	0x10C6E0C0
	.long	0x10E7E8C0
	.long	0x13C4FEC2
	.long	0x10E7F0C0
	vxor	29,0,1
	vsel	29,1,2,29
	.long	0x106338C0
	.long	0x13C086C2
	.long	0x13DEE8C0
	.long	0x10E7F0C0
	lvx	28,26,7
	.long	0x13D306C2
	.long	0x1252F0C0
	.long	0x13D07EC2
	.long	0x1252F0C0
	.long	0x125258C0
	.long	0x10C688C0
	vsel	29,5,4,3
	.long	0x10A5E0C0
	.long	0x10C6E8C0
	.long	0x13C3FEC2
	.long	0x10C6F0C0
	vxor	29,7,0
	vsel	29,0,1,29
	.long	0x104230C0
	.long	0x13C786C2
	.long	0x13DEE8C0
	.long	0x10C6F0C0
	lvx	28,27,7
	.long	0x13D806C2
	.long	0x1273F0C0
	.long	0x13D17EC2
	.long	0x1273F0C0
	.long	0x127360C0
	.long	0x10A590C0
	vsel	29,4,3,2
	.long	0x1084E0C0
	.long	0x10A5E8C0
	.long	0x13C2FEC2
	.long	0x10A5F0C0
	vxor	29,6,7
	vsel	29,7,0,29
	.long	0x102128C0
	.long	0x13C686C2
	.long	0x13DEE8C0
	.long	0x10A5F0C0
	lvx	28,28,7
	.long	0x13D906C2
	.long	0x1318F0C0
	.long	0x13D27EC2
	.long	0x1318F0C0
	.long	0x131868C0
	.long	0x108498C0
	vsel	29,3,2,1
	.long	0x1063E0C0
	.long	0x1084E8C0
	.long	0x13C1FEC2
	.long	0x1084F0C0
	vxor	29,5,6
	vsel	29,6,7,29
	.long	0x100020C0
	.long	0x13C586C2
	.long	0x13DEE8C0
	.long	0x1084F0C0
	lvx	28,29,7
	.long	0x13DA06C2
	.long	0x1339F0C0
	.long	0x13D37EC2
	.long	0x1339F0C0
	.long	0x133970C0
	.long	0x1063C0C0
	vsel	29,2,1,0
	.long	0x1042E0C0
	.long	0x1063E8C0
	.long	0x13C0FEC2
	.long	0x1063F0C0
	vxor	29,4,5
	vsel	29,5,6,29
	.long	0x10E718C0
	.long	0x13C486C2
	.long	0x13DEE8C0
	.long	0x1063F0C0
	lvx	28,30,7
	.long	0x13DB06C2
	.long	0x135AF0C0
	.long	0x13D87EC2
	.long	0x135AF0C0
	.long	0x135A78C0
	.long	0x1042C8C0
	vsel	29,1,0,7
	.long	0x1021E0C0
	.long	0x1042E8C0
	.long	0x13C7FEC2
	.long	0x1042F0C0
	vxor	29,3,4
	vsel	29,4,5,29
	.long	0x10C610C0
	.long	0x13C386C2
	.long	0x13DEE8C0
	.long	0x1042F0C0
	lvx	28,31,7
	addi	7,7,0x80
	.long	0x13C806C2
	.long	0x137BF0C0
	.long	0x13D97EC2
	.long	0x137BF0C0
	.long	0x137B80C0
	.long	0x1021D0C0
	vsel	29,0,7,6
	.long	0x1000E0C0
	.long	0x1021E8C0
	.long	0x13C6FEC2
	.long	0x1021F0C0
	vxor	29,2,3
	vsel	29,3,4,29
	.long	0x10A508C0
	.long	0x13C286C2
	.long	0x13DEE8C0
	.long	0x1021F0C0
	lvx	28,0,7
	.long	0x13C906C2
	.long	0x1108F0C0
	.long	0x13DA7EC2
	.long	0x1108F0C0
	.long	0x110888C0
	.long	0x1000D8C0
	vsel	29,7,6,5
	.long	0x10E7E0C0
	.long	0x1000E8C0
	.long	0x13C5FEC2
	.long	0x1000F0C0
	vxor	29,1,2
	vsel	29,2,3,29
	.long	0x108400C0
	.long	0x13C186C2
	.long	0x13DEE8C0
	.long	0x1000F0C0
	lvx	28,10,7
	bdnz	.L16_xx

	lvx	10,0,11
	subic.	5,5,1
	lvx	11,10,11
	.long	0x100050C0
	lvx	12,26,11
	.long	0x102158C0
	lvx	13,27,11
	.long	0x104260C0
	lvx	14,28,11
	.long	0x106368C0
	lvx	15,29,11
	.long	0x108470C0
	lvx	16,30,11
	.long	0x10A578C0
	lvx	17,31,11
	.long	0x10C680C0
	.long	0x10E788C0
	bne	.Loop
	vperm	0,0,1,28
	vperm	2,2,3,28
	vperm	4,4,5,28
	vperm	6,6,7,28
	.long	0x7C001F99
	.long	0x7C4A1F99
	.long	0x7C9A1F99
	.long	0x7CDB1F99
	addi	11,1,207
	mtlr	8
	mtspr	256,12
	lvx	24,0,11
	lvx	25,10,11
	lvx	26,26,11
	lvx	27,27,11
	lvx	28,28,11
	lvx	29,29,11
	lvx	30,30,11
	lvx	31,31,11
	ld	26,336(1)
	ld	27,344(1)
	ld	28,352(1)
	ld	29,360(1)
	ld	30,368(1)
	ld	31,376(1)
	addi	1,1,384
	blr	
.long	0
.byte	0,12,4,1,0x80,6,3,0
.long	0
#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
.size	.zfs_sha512_power8,.-.zfs_sha512_power8
.size	zfs_sha512_power8,.-.zfs_sha512_power8
#else
.size	zfs_sha512_power8,.-zfs_sha512_power8
#endif
.align	6
.LPICmeup:
	mflr	0
	bcl	20,31,$+4
	mflr	6
	addi	6,6,56
	mtlr	0
	blr	
.long	0
.byte	0,12,0x14,0,0,0,0,0
.space	28
.long	0x428a2f98,0xd728ae22
.long	0x428a2f98,0xd728ae22
.long	0x71374491,0x23ef65cd
.long	0x71374491,0x23ef65cd
.long	0xb5c0fbcf,0xec4d3b2f
.long	0xb5c0fbcf,0xec4d3b2f
.long	0xe9b5dba5,0x8189dbbc
.long	0xe9b5dba5,0x8189dbbc
.long	0x3956c25b,0xf348b538
.long	0x3956c25b,0xf348b538
.long	0x59f111f1,0xb605d019
.long	0x59f111f1,0xb605d019
.long	0x923f82a4,0xaf194f9b
.long	0x923f82a4,0xaf194f9b
.long	0xab1c5ed5,0xda6d8118
.long	0xab1c5ed5,0xda6d8118
.long	0xd807aa98,0xa3030242
.long	0xd807aa98,0xa3030242
.long	0x12835b01,0x45706fbe
.long	0x12835b01,0x45706fbe
.long	0x243185be,0x4ee4b28c
.long	0x243185be,0x4ee4b28c
.long	0x550c7dc3,0xd5ffb4e2
.long	0x550c7dc3,0xd5ffb4e2
.long	0x72be5d74,0xf27b896f
.long	0x72be5d74,0xf27b896f
.long	0x80deb1fe,0x3b1696b1
.long	0x80deb1fe,0x3b1696b1
.long	0x9bdc06a7,0x25c71235
.long	0x9bdc06a7,0x25c71235
.long	0xc19bf174,0xcf692694
.long	0xc19bf174,0xcf692694
.long	0xe49b69c1,0x9ef14ad2
.long	0xe49b69c1,0x9ef14ad2
.long	0xefbe4786,0x384f25e3
.long	0xefbe4786,0x384f25e3
.long	0x0fc19dc6,0x8b8cd5b5
.long	0x0fc19dc6,0x8b8cd5b5
.long	0x240ca1cc,0x77ac9c65
.long	0x240ca1cc,0x77ac9c65
.long	0x2de92c6f,0x592b0275
.long	0x2de92c6f,0x592b0275
.long	0x4a7484aa,0x6ea6e483
.long	0x4a7484aa,0x6ea6e483
.long	0x5cb0a9dc,0xbd41fbd4
.long	0x5cb0a9dc,0xbd41fbd4
.long	0x76f988da,0x831153b5
.long	0x76f988da,0x831153b5
.long	0x983e5152,0xee66dfab
.long	0x983e5152,0xee66dfab
.long	0xa831c66d,0x2db43210
.long	0xa831c66d,0x2db43210
.long	0xb00327c8,0x98fb213f
.long	0xb00327c8,0x98fb213f
.long	0xbf597fc7,0xbeef0ee4
.long	0xbf597fc7,0xbeef0ee4
.long	0xc6e00bf3,0x3da88fc2
.long	0xc6e00bf3,0x3da88fc2
.long	0xd5a79147,0x930aa725
.long	0xd5a79147,0x930aa725
.long	0x06ca6351,0xe003826f
.long	0x06ca6351,0xe003826f
.long	0x14292967,0x0a0e6e70
.long	0x14292967,0x0a0e6e70
.long	0x27b70a85,0x46d22ffc
.long	0x27b70a85,0x46d22ffc
.long	0x2e1b2138,0x5c26c926
.long	0x2e1b2138,0x5c26c926
.long	0x4d2c6dfc,0x5ac42aed
.long	0x4d2c6dfc,0x5ac42aed
.long	0x53380d13,0x9d95b3df
.long	0x53380d13,0x9d95b3df
.long	0x650a7354,0x8baf63de
.long	0x650a7354,0x8baf63de
.long	0x766a0abb,0x3c77b2a8
.long	0x766a0abb,0x3c77b2a8
.long	0x81c2c92e,0x47edaee6
.long	0x81c2c92e,0x47edaee6
.long	0x92722c85,0x1482353b
.long	0x92722c85,0x1482353b
.long	0xa2bfe8a1,0x4cf10364
.long	0xa2bfe8a1,0x4cf10364
.long	0xa81a664b,0xbc423001
.long	0xa81a664b,0xbc423001
.long	0xc24b8b70,0xd0f89791
.long	0xc24b8b70,0xd0f89791
.long	0xc76c51a3,0x0654be30
.long	0xc76c51a3,0x0654be30
.long	0xd192e819,0xd6ef5218
.long	0xd192e819,0xd6ef5218
.long	0xd6990624,0x5565a910
.long	0xd6990624,0x5565a910
.long	0xf40e3585,0x5771202a
.long	0xf40e3585,0x5771202a
.long	0x106aa070,0x32bbd1b8
.long	0x106aa070,0x32bbd1b8
.long	0x19a4c116,0xb8d2d0c8
.long	0x19a4c116,0xb8d2d0c8
.long	0x1e376c08,0x5141ab53
.long	0x1e376c08,0x5141ab53
.long	0x2748774c,0xdf8eeb99
.long	0x2748774c,0xdf8eeb99
.long	0x34b0bcb5,0xe19b48a8
.long	0x34b0bcb5,0xe19b48a8
.long	0x391c0cb3,0xc5c95a63
.long	0x391c0cb3,0xc5c95a63
.long	0x4ed8aa4a,0xe3418acb
.long	0x4ed8aa4a,0xe3418acb
.long	0x5b9cca4f,0x7763e373
.long	0x5b9cca4f,0x7763e373
.long	0x682e6ff3,0xd6b2b8a3
.long	0x682e6ff3,0xd6b2b8a3
.long	0x748f82ee,0x5defb2fc
.long	0x748f82ee,0x5defb2fc
.long	0x78a5636f,0x43172f60
.long	0x78a5636f,0x43172f60
.long	0x84c87814,0xa1f0ab72
.long	0x84c87814,0xa1f0ab72
.long	0x8cc70208,0x1a6439ec
.long	0x8cc70208,0x1a6439ec
.long	0x90befffa,0x23631e28
.long	0x90befffa,0x23631e28
.long	0xa4506ceb,0xde82bde9
.long	0xa4506ceb,0xde82bde9
.long	0xbef9a3f7,0xb2c67915
.long	0xbef9a3f7,0xb2c67915
.long	0xc67178f2,0xe372532b
.long	0xc67178f2,0xe372532b
.long	0xca273ece,0xea26619c
.long	0xca273ece,0xea26619c
.long	0xd186b8c7,0x21c0c207
.long	0xd186b8c7,0x21c0c207
.long	0xeada7dd6,0xcde0eb1e
.long	0xeada7dd6,0xcde0eb1e
.long	0xf57d4f7f,0xee6ed178
.long	0xf57d4f7f,0xee6ed178
.long	0x06f067aa,0x72176fba
.long	0x06f067aa,0x72176fba
.long	0x0a637dc5,0xa2c898a6
.long	0x0a637dc5,0xa2c898a6
.long	0x113f9804,0xbef90dae
.long	0x113f9804,0xbef90dae
.long	0x1b710b35,0x131c471b
.long	0x1b710b35,0x131c471b
.long	0x28db77f5,0x23047d84
.long	0x28db77f5,0x23047d84
.long	0x32caab7b,0x40c72493
.long	0x32caab7b,0x40c72493
.long	0x3c9ebe0a,0x15c9bebc
.long	0x3c9ebe0a,0x15c9bebc
.long	0x431d67c4,0x9c100d4c
.long	0x431d67c4,0x9c100d4c
.long	0x4cc5d4be,0xcb3e42b6
.long	0x4cc5d4be,0xcb3e42b6
.long	0x597f299c,0xfc657e2a
.long	0x597f299c,0xfc657e2a
.long	0x5fcb6fab,0x3ad6faec
.long	0x5fcb6fab,0x3ad6faec
.long	0x6c44198c,0x4a475817
.long	0x6c44198c,0x4a475817
.long	0,0
.long	0,0
.long	0x00010203,0x04050607
.long	0x10111213,0x14151617

#elif (defined(__PPC64__) && defined(__LITTLE_ENDIAN__))

.abiversion	2
.text

.globl	zfs_sha512_power8
.type	zfs_sha512_power8,@function
.align	6
zfs_sha512_power8:
.localentry	zfs_sha512_power8,0

	stdu	1,-384(1)
	mflr	8
	li	10,207
	li	11,223
	stvx	24,10,1
	addi	10,10,32
	li	12,-1
	stvx	25,11,1
	addi	11,11,32
	stvx	26,10,1
	addi	10,10,32
	stvx	27,11,1
	addi	11,11,32
	stvx	28,10,1
	addi	10,10,32
	stvx	29,11,1
	addi	11,11,32
	stvx	30,10,1
	stvx	31,11,1
	li	11,-4096+255
	stw	12,332(1)
	li	10,0x10
	std	26,336(1)
	li	26,0x20
	std	27,344(1)
	li	27,0x30
	std	28,352(1)
	li	28,0x40
	std	29,360(1)
	li	29,0x50
	std	30,368(1)
	li	30,0x60
	std	31,376(1)
	li	31,0x70
	std	8,400(1)
	or	11,11,11

	bl	.LPICmeup
	addi	11,1,79
	li	7,8
	lvsl	31,0,7
	vspltisb	28,0x0f
	vxor	31,31,28
	.long	0x7C001E99
	.long	0x7C4A1E99
	.long	0x7C9A1E99
	vsldoi	1,0,0,8
	.long	0x7CDB1E99
	vsldoi	3,2,2,8
	vsldoi	5,4,4,8
	vsldoi	7,6,6,8
	li	0,4
	b	.Loop
.align	5
.Loop:
	lvx	28,0,6
	.long	0x7D002699
	addi	4,4,16
	mr	7,6
	stvx	0,0,11
	stvx	1,10,11
	stvx	2,26,11
	stvx	3,27,11
	stvx	4,28,11
	stvx	5,29,11
	stvx	6,30,11
	stvx	7,31,11
	.long	0x10E7E0C0
	lvx	28,10,6
	vperm	8,8,8,31
	.long	0x10E740C0
	vsel	29,6,5,4
	.long	0x10C6E0C0
	.long	0x10E7E8C0
	.long	0x13C4FEC2
	.long	0x10E7F0C0
	vxor	29,0,1
	vsel	29,1,2,29
	.long	0x106338C0
	.long	0x13C086C2
	.long	0x13DEE8C0
	.long	0x10E7F0C0
	lvx	28,26,7
	.long	0x7D402699
	addi	4,4,16
	vsldoi	9,8,8,8
	.long	0x10C648C0
	vsel	29,5,4,3
	.long	0x10A5E0C0
	.long	0x10C6E8C0
	.long	0x13C3FEC2
	.long	0x10C6F0C0
	vxor	29,7,0
	vsel	29,0,1,29
	.long	0x104230C0
	.long	0x13C786C2
	.long	0x13DEE8C0
	.long	0x10C6F0C0
	lvx	28,27,7
	vperm	10,10,10,31
	.long	0x10A550C0
	vsel	29,4,3,2
	.long	0x1084E0C0
	.long	0x10A5E8C0
	.long	0x13C2FEC2
	.long	0x10A5F0C0
	vxor	29,6,7
	vsel	29,7,0,29
	.long	0x102128C0
	.long	0x13C686C2
	.long	0x13DEE8C0
	.long	0x10A5F0C0
	lvx	28,28,7
	.long	0x7D802699
	addi	4,4,16
	vsldoi	11,10,10,8
	.long	0x108458C0
	vsel	29,3,2,1
	.long	0x1063E0C0
	.long	0x1084E8C0
	.long	0x13C1FEC2
	.long	0x1084F0C0
	vxor	29,5,6
	vsel	29,6,7,29
	.long	0x100020C0
	.long	0x13C586C2
	.long	0x13DEE8C0
	.long	0x1084F0C0
	lvx	28,29,7
	vperm	12,12,12,31
	.long	0x106360C0
	vsel	29,2,1,0
	.long	0x1042E0C0
	.long	0x1063E8C0
	.long	0x13C0FEC2
	.long	0x1063F0C0
	vxor	29,4,5
	vsel	29,5,6,29
	.long	0x10E718C0
	.long	0x13C486C2
	.long	0x13DEE8C0
	.long	0x1063F0C0
	lvx	28,30,7
	.long	0x7DC02699
	addi	4,4,16
	vsldoi	13,12,12,8
	.long	0x104268C0
	vsel	29,1,0,7
	.long	0x1021E0C0
	.long	0x1042E8C0
	.long	0x13C7FEC2
	.long	0x1042F0C0
	vxor	29,3,4
	vsel	29,4,5,29
	.long	0x10C610C0
	.long	0x13C386C2
	.long	0x13DEE8C0
	.long	0x1042F0C0
	lvx	28,31,7
	addi	7,7,0x80
	vperm	14,14,14,31
	.long	0x102170C0
	vsel	29,0,7,6
	.long	0x1000E0C0
	.long	0x1021E8C0
	.long	0x13C6FEC2
	.long	0x1021F0C0
	vxor	29,2,3
	vsel	29,3,4,29
	.long	0x10A508C0
	.long	0x13C286C2
	.long	0x13DEE8C0
	.long	0x1021F0C0
	lvx	28,0,7
	.long	0x7E002699
	addi	4,4,16
	vsldoi	15,14,14,8
	.long	0x100078C0
	vsel	29,7,6,5
	.long	0x10E7E0C0
	.long	0x1000E8C0
	.long	0x13C5FEC2
	.long	0x1000F0C0
	vxor	29,1,2
	vsel	29,2,3,29
	.long	0x108400C0
	.long	0x13C186C2
	.long	0x13DEE8C0
	.long	0x1000F0C0
	lvx	28,10,7
	vperm	16,16,16,31
	.long	0x10E780C0
	vsel	29,6,5,4
	.long	0x10C6E0C0
	.long	0x10E7E8C0
	.long	0x13C4FEC2
	.long	0x10E7F0C0
	vxor	29,0,1
	vsel	29,1,2,29
	.long	0x106338C0
	.long	0x13C086C2
	.long	0x13DEE8C0
	.long	0x10E7F0C0
	lvx	28,26,7
	.long	0x7E402699
	addi	4,4,16
	vsldoi	17,16,16,8
	.long	0x10C688C0
	vsel	29,5,4,3
	.long	0x10A5E0C0
	.long	0x10C6E8C0
	.long	0x13C3FEC2
	.long	0x10C6F0C0
	vxor	29,7,0
	vsel	29,0,1,29
	.long	0x104230C0
	.long	0x13C786C2
	.long	0x13DEE8C0
	.long	0x10C6F0C0
	lvx	28,27,7
	vperm	18,18,18,31
	.long	0x10A590C0
	vsel	29,4,3,2
	.long	0x1084E0C0
	.long	0x10A5E8C0
	.long	0x13C2FEC2
	.long	0x10A5F0C0
	vxor	29,6,7
	vsel	29,7,0,29
	.long	0x102128C0
	.long	0x13C686C2
	.long	0x13DEE8C0
	.long	0x10A5F0C0
	lvx	28,28,7
	.long	0x7F002699
	addi	4,4,16
	vsldoi	19,18,18,8
	.long	0x108498C0
	vsel	29,3,2,1
	.long	0x1063E0C0
	.long	0x1084E8C0
	.long	0x13C1FEC2
	.long	0x1084F0C0
	vxor	29,5,6
	vsel	29,6,7,29
	.long	0x100020C0
	.long	0x13C586C2
	.long	0x13DEE8C0
	.long	0x1084F0C0
	lvx	28,29,7
	vperm	24,24,24,31
	.long	0x1063C0C0
	vsel	29,2,1,0
	.long	0x1042E0C0
	.long	0x1063E8C0
	.long	0x13C0FEC2
	.long	0x1063F0C0
	vxor	29,4,5
	vsel	29,5,6,29
	.long	0x10E718C0
	.long	0x13C486C2
	.long	0x13DEE8C0
	.long	0x1063F0C0
	lvx	28,30,7
	.long	0x7F402699
	addi	4,4,16
	vsldoi	25,24,24,8
	.long	0x1042C8C0
	vsel	29,1,0,7
	.long	0x1021E0C0
	.long	0x1042E8C0
	.long	0x13C7FEC2
	.long	0x1042F0C0
	vxor	29,3,4
	vsel	29,4,5,29
	.long	0x10C610C0
	.long	0x13C386C2
	.long	0x13DEE8C0
	.long	0x1042F0C0
	lvx	28,31,7
	addi	7,7,0x80
	vperm	26,26,26,31
	.long	0x1021D0C0
	vsel	29,0,7,6
	.long	0x1000E0C0
	.long	0x1021E8C0
	.long	0x13C6FEC2
	.long	0x1021F0C0
	vxor	29,2,3
	vsel	29,3,4,29
	.long	0x10A508C0
	.long	0x13C286C2
	.long	0x13DEE8C0
	.long	0x1021F0C0
	lvx	28,0,7
	vsldoi	27,26,26,8
	.long	0x13C906C2
	.long	0x1108F0C0
	.long	0x13DA7EC2
	.long	0x1108F0C0
	.long	0x110888C0
	.long	0x1000D8C0
	vsel	29,7,6,5
	.long	0x10E7E0C0
	.long	0x1000E8C0
	.long	0x13C5FEC2
	.long	0x1000F0C0
	vxor	29,1,2
	vsel	29,2,3,29
	.long	0x108400C0
	.long	0x13C186C2
	.long	0x13DEE8C0
	.long	0x1000F0C0
	lvx	28,10,7
	mtctr	0
	b	.L16_xx
.align	5
.L16_xx:
	.long	0x13CA06C2
	.long	0x1129F0C0
	.long	0x13DB7EC2
	.long	0x1129F0C0
	.long	0x112990C0
	.long	0x10E740C0
	vsel	29,6,5,4
	.long	0x10C6E0C0
	.long	0x10E7E8C0
	.long	0x13C4FEC2
	.long	0x10E7F0C0
	vxor	29,0,1
	vsel	29,1,2,29
	.long	0x106338C0
	.long	0x13C086C2
	.long	0x13DEE8C0
	.long	0x10E7F0C0
	lvx	28,26,7
	.long	0x13CB06C2
	.long	0x114AF0C0
	.long	0x13C87EC2
	.long	0x114AF0C0
	.long	0x114A98C0
	.long	0x10C648C0
	vsel	29,5,4,3
	.long	0x10A5E0C0
	.long	0x10C6E8C0
	.long	0x13C3FEC2
	.long	0x10C6F0C0
	vxor	29,7,0
	vsel	29,0,1,29
	.long	0x104230C0
	.long	0x13C786C2
	.long	0x13DEE8C0
	.long	0x10C6F0C0
	lvx	28,27,7
	.long	0x13CC06C2
	.long	0x116BF0C0
	.long	0x13C97EC2
	.long	0x116BF0C0
	.long	0x116BC0C0
	.long	0x10A550C0
	vsel	29,4,3,2
	.long	0x1084E0C0
	.long	0x10A5E8C0
	.long	0x13C2FEC2
	.long	0x10A5F0C0
	vxor	29,6,7
	vsel	29,7,0,29
	.long	0x102128C0
	.long	0x13C686C2
	.long	0x13DEE8C0
	.long	0x10A5F0C0
	lvx	28,28,7
	.long	0x13CD06C2
	.long	0x118CF0C0
	.long	0x13CA7EC2
	.long	0x118CF0C0
	.long	0x118CC8C0
	.long	0x108458C0
	vsel	29,3,2,1
	.long	0x1063E0C0
	.long	0x1084E8C0
	.long	0x13C1FEC2
	.long	0x1084F0C0
	vxor	29,5,6
	vsel	29,6,7,29
	.long	0x100020C0
	.long	0x13C586C2
	.long	0x13DEE8C0
	.long	0x1084F0C0
	lvx	28,29,7
	.long	0x13CE06C2
	.long	0x11ADF0C0
	.long	0x13CB7EC2
	.long	0x11ADF0C0
	.long	0x11ADD0C0
	.long	0x106360C0
	vsel	29,2,1,0
	.long	0x1042E0C0
	.long	0x1063E8C0
	.long	0x13C0FEC2
	.long	0x1063F0C0
	vxor	29,4,5
	vsel	29,5,6,29
	.long	0x10E718C0
	.long	0x13C486C2
	.long	0x13DEE8C0
	.long	0x1063F0C0
	lvx	28,30,7
	.long	0x13CF06C2
	.long	0x11CEF0C0
	.long	0x13CC7EC2
	.long	0x11CEF0C0
	.long	0x11CED8C0
	.long	0x104268C0
	vsel	29,1,0,7
	.long	0x1021E0C0
	.long	0x1042E8C0
	.long	0x13C7FEC2
	.long	0x1042F0C0
	vxor	29,3,4
	vsel	29,4,5,29
	.long	0x10C610C0
	.long	0x13C386C2
	.long	0x13DEE8C0
	.long	0x1042F0C0
	lvx	28,31,7
	addi	7,7,0x80
	.long	0x13D006C2
	.long	0x11EFF0C0
	.long	0x13CD7EC2
	.long	0x11EFF0C0
	.long	0x11EF40C0
	.long	0x102170C0
	vsel	29,0,7,6
	.long	0x1000E0C0
	.long	0x1021E8C0
	.long	0x13C6FEC2
	.long	0x1021F0C0
	vxor	29,2,3
	vsel	29,3,4,29
	.long	0x10A508C0
	.long	0x13C286C2
	.long	0x13DEE8C0
	.long	0x1021F0C0
	lvx	28,0,7
	.long	0x13D106C2
	.long	0x1210F0C0
	.long	0x13CE7EC2
	.long	0x1210F0C0
	.long	0x121048C0
	.long	0x100078C0
	vsel	29,7,6,5
	.long	0x10E7E0C0
	.long	0x1000E8C0
	.long	0x13C5FEC2
	.long	0x1000F0C0
	vxor	29,1,2
	vsel	29,2,3,29
	.long	0x108400C0
	.long	0x13C186C2
	.long	0x13DEE8C0
	.long	0x1000F0C0
	lvx	28,10,7
	.long	0x13D206C2
	.long	0x1231F0C0
	.long	0x13CF7EC2
	.long	0x1231F0C0
	.long	0x123150C0
	.long	0x10E780C0
	vsel	29,6,5,4
	.long	0x10C6E0C0
	.long	0x10E7E8C0
	.long	0x13C4FEC2
	.long	0x10E7F0C0
	vxor	29,0,1
	vsel	29,1,2,29
	.long	0x106338C0
	.long	0x13C086C2
	.long	0x13DEE8C0
	.long	0x10E7F0C0
	lvx	28,26,7
	.long	0x13D306C2
	.long	0x1252F0C0
	.long	0x13D07EC2
	.long	0x1252F0C0
	.long	0x125258C0
	.long	0x10C688C0
	vsel	29,5,4,3
	.long	0x10A5E0C0
	.long	0x10C6E8C0
	.long	0x13C3FEC2
	.long	0x10C6F0C0
	vxor	29,7,0
	vsel	29,0,1,29
	.long	0x104230C0
	.long	0x13C786C2
	.long	0x13DEE8C0
	.long	0x10C6F0C0
	lvx	28,27,7
	.long	0x13D806C2
	.long	0x1273F0C0
	.long	0x13D17EC2
	.long	0x1273F0C0
	.long	0x127360C0
	.long	0x10A590C0
	vsel	29,4,3,2
	.long	0x1084E0C0
	.long	0x10A5E8C0
	.long	0x13C2FEC2
	.long	0x10A5F0C0
	vxor	29,6,7
	vsel	29,7,0,29
	.long	0x102128C0
	.long	0x13C686C2
	.long	0x13DEE8C0
	.long	0x10A5F0C0
	lvx	28,28,7
	.long	0x13D906C2
	.long	0x1318F0C0
	.long	0x13D27EC2
	.long	0x1318F0C0
	.long	0x131868C0
	.long	0x108498C0
	vsel	29,3,2,1
	.long	0x1063E0C0
	.long	0x1084E8C0
	.long	0x13C1FEC2
	.long	0x1084F0C0
	vxor	29,5,6
	vsel	29,6,7,29
	.long	0x100020C0
	.long	0x13C586C2
	.long	0x13DEE8C0
	.long	0x1084F0C0
	lvx	28,29,7
	.long	0x13DA06C2
	.long	0x1339F0C0
	.long	0x13D37EC2
	.long	0x1339F0C0
	.long	0x133970C0
	.long	0x1063C0C0
	vsel	29,2,1,0
	.long	0x1042E0C0
	.long	0x1063E8C0
	.long	0x13C0FEC2
	.long	0x1063F0C0
	vxor	29,4,5
	vsel	29,5,6,29
	.long	0x10E718C0
	.long	0x13C486C2
	.long	0x13DEE8C0
	.long	0x1063F0C0
	lvx	28,30,7
	.long	0x13DB06C2
	.long	0x135AF0C0
	.long	0x13D87EC2
	.long	0x135AF0C0
	.long	0x135A78C0
	.long	0x1042C8C0
	vsel	29,1,0,7
	.long	0x1021E0C0
	.long	0x1042E8C0
	.long	0x13C7FEC2
	.long	0x1042F0C0
	vxor	29,3,4
	vsel	29,4,5,29
	.long	0x10C610C0
	.long	0x13C386C2
	.long	0x13DEE8C0
	.long	0x1042F0C0
	lvx	28,31,7
	addi	7,7,0x80
	.long	0x13C806C2
	.long	0x137BF0C0
	.long	0x13D97EC2
	.long	0x137BF0C0
	.long	0x137B80C0
	.long	0x1021D0C0
	vsel	29,0,7,6
	.long	0x1000E0C0
	.long	0x1021E8C0
	.long	0x13C6FEC2
	.long	0x1021F0C0
	vxor	29,2,3
	vsel	29,3,4,29
	.long	0x10A508C0
	.long	0x13C286C2
	.long	0x13DEE8C0
	.long	0x1021F0C0
	lvx	28,0,7
	.long	0x13C906C2
	.long	0x1108F0C0
	.long	0x13DA7EC2
	.long	0x1108F0C0
	.long	0x110888C0
	.long	0x1000D8C0
	vsel	29,7,6,5
	.long	0x10E7E0C0
	.long	0x1000E8C0
	.long	0x13C5FEC2
	.long	0x1000F0C0
	vxor	29,1,2
	vsel	29,2,3,29
	.long	0x108400C0
	.long	0x13C186C2
	.long	0x13DEE8C0
	.long	0x1000F0C0
	lvx	28,10,7
	bdnz	.L16_xx

	lvx	10,0,11
	subic.	5,5,1
	lvx	11,10,11
	.long	0x100050C0
	lvx	12,26,11
	.long	0x102158C0
	lvx	13,27,11
	.long	0x104260C0
	lvx	14,28,11
	.long	0x106368C0
	lvx	15,29,11
	.long	0x108470C0
	lvx	16,30,11
	.long	0x10A578C0
	lvx	17,31,11
	.long	0x10C680C0
	.long	0x10E788C0
	bne	.Loop
	vperm	0,0,1,28
	vperm	2,2,3,28
	vperm	4,4,5,28
	vperm	6,6,7,28
	.long	0x7C001F99
	.long	0x7C4A1F99
	.long	0x7C9A1F99
	.long	0x7CDB1F99
	addi	11,1,207
	mtlr	8
	or	12,12,12
	lvx	24,0,11
	lvx	25,10,11
	lvx	26,26,11
	lvx	27,27,11
	lvx	28,28,11
	lvx	29,29,11
	lvx	30,30,11
	lvx	31,31,11
	ld	26,336(1)
	ld	27,344(1)
	ld	28,352(1)
	ld	29,360(1)
	ld	30,368(1)
	ld	31,376(1)
	addi	1,1,384
	blr	
.long	0
.byte	0,12,4,1,0x80,6,3,0
.long	0
.size	zfs_sha512_power8,.-zfs_sha512_power8
.align	6
.LPICmeup:
	mflr	0
	bcl	20,31,$+4
	mflr	6
	addi	6,6,56
	mtlr	0
	blr	
.long	0
.byte	0,12,0x14,0,0,0,0,0
.space	28
.long	0xd728ae22,0x428a2f98
.long	0xd728ae22,0x428a2f98
.long	0x23ef65cd,0x71374491
.long	0x23ef65cd,0x71374491
.long	0xec4d3b2f,0xb5c0fbcf
.long	0xec4d3b2f,0xb5c0fbcf
.long	0x8189dbbc,0xe9b5dba5
.long	0x8189dbbc,0xe9b5dba5
.long	0xf348b538,0x3956c25b
.long	0xf348b538,0x3956c25b
.long	0xb605d019,0x59f111f1
.long	0xb605d019,0x59f111f1
.long	0xaf194f9b,0x923f82a4
.long	0xaf194f9b,0x923f82a4
.long	0xda6d8118,0xab1c5ed5
.long	0xda6d8118,0xab1c5ed5
.long	0xa3030242,0xd807aa98
.long	0xa3030242,0xd807aa98
.long	0x45706fbe,0x12835b01
.long	0x45706fbe,0x12835b01
.long	0x4ee4b28c,0x243185be
.long	0x4ee4b28c,0x243185be
.long	0xd5ffb4e2,0x550c7dc3
.long	0xd5ffb4e2,0x550c7dc3
.long	0xf27b896f,0x72be5d74
.long	0xf27b896f,0x72be5d74
.long	0x3b1696b1,0x80deb1fe
.long	0x3b1696b1,0x80deb1fe
.long	0x25c71235,0x9bdc06a7
.long	0x25c71235,0x9bdc06a7
.long	0xcf692694,0xc19bf174
.long	0xcf692694,0xc19bf174
.long	0x9ef14ad2,0xe49b69c1
.long	0x9ef14ad2,0xe49b69c1
.long	0x384f25e3,0xefbe4786
.long	0x384f25e3,0xefbe4786
.long	0x8b8cd5b5,0x0fc19dc6
.long	0x8b8cd5b5,0x0fc19dc6
.long	0x77ac9c65,0x240ca1cc
.long	0x77ac9c65,0x240ca1cc
.long	0x592b0275,0x2de92c6f
.long	0x592b0275,0x2de92c6f
.long	0x6ea6e483,0x4a7484aa
.long	0x6ea6e483,0x4a7484aa
.long	0xbd41fbd4,0x5cb0a9dc
.long	0xbd41fbd4,0x5cb0a9dc
.long	0x831153b5,0x76f988da
.long	0x831153b5,0x76f988da
.long	0xee66dfab,0x983e5152
.long	0xee66dfab,0x983e5152
.long	0x2db43210,0xa831c66d
.long	0x2db43210,0xa831c66d
.long	0x98fb213f,0xb00327c8
.long	0x98fb213f,0xb00327c8
.long	0xbeef0ee4,0xbf597fc7
.long	0xbeef0ee4,0xbf597fc7
.long	0x3da88fc2,0xc6e00bf3
.long	0x3da88fc2,0xc6e00bf3
.long	0x930aa725,0xd5a79147
.long	0x930aa725,0xd5a79147
.long	0xe003826f,0x06ca6351
.long	0xe003826f,0x06ca6351
.long	0x0a0e6e70,0x14292967
.long	0x0a0e6e70,0x14292967
.long	0x46d22ffc,0x27b70a85
.long	0x46d22ffc,0x27b70a85
.long	0x5c26c926,0x2e1b2138
.long	0x5c26c926,0x2e1b2138
.long	0x5ac42aed,0x4d2c6dfc
.long	0x5ac42aed,0x4d2c6dfc
.long	0x9d95b3df,0x53380d13
.long	0x9d95b3df,0x53380d13
.long	0x8baf63de,0x650a7354
.long	0x8baf63de,0x650a7354
.long	0x3c77b2a8,0x766a0abb
.long	0x3c77b2a8,0x766a0abb
.long	0x47edaee6,0x81c2c92e
.long	0x47edaee6,0x81c2c92e
.long	0x1482353b,0x92722c85
.long	0x1482353b,0x92722c85
.long	0x4cf10364,0xa2bfe8a1
.long	0x4cf10364,0xa2bfe8a1
.long	0xbc423001,0xa81a664b
.long	0xbc423001,0xa81a664b
.long	0xd0f89791,0xc24b8b70
.long	0xd0f89791,0xc24b8b70
.long	0x0654be30,0xc76c51a3
.long	0x0654be30,0xc76c51a3
.long	0xd6ef5218,0xd192e819
.long	0xd6ef5218,0xd192e819
.long	0x5565a910,0xd6990624
.long	0x5565a910,0xd6990624
.long	0x5771202a,0xf40e3585
.long	0x5771202a,0xf40e3585
.long	0x32bbd1b8,0x106aa070
.long	0x32bbd1b8,0x106aa070
.long	0xb8d2d0c8,0x19a4c116
.long	0xb8d2d0c8,0x19a4c116
.long	0x5141ab53,0x1e376c08
.long	0x5141ab53,0x1e376c08
.long	0xdf8eeb99,0x2748774c
.long	0xdf8eeb99,0x2748774c
.long	0xe19b48a8,0x34b0bcb5
.long	0xe19b48a8,0x34b0bcb5
.long	0xc5c95a63,0x391c0cb3
.long	0xc5c95a63,0x391c0cb3
.long	0xe3418acb,0x4ed8aa4a
.long	0xe3418acb,0x4ed8aa4a
.long	0x7763e373,0x5b9cca4f
.long	0x7763e373,0x5b9cca4f
.long	0xd6b2b8a3,0x682e6ff3
.long	0xd6b2b8a3,0x682e6ff3
.long	0x5defb2fc,0x748f82ee
.long	0x5defb2fc,0x748f82ee
.long	0x43172f60,0x78a5636f
.long	0x43172f60,0x78a5636f
.long	0xa1f0ab72,0x84c87814
.long	0xa1f0ab72,0x84c87814
.long	0x1a6439ec,0x8cc70208
.long	0x1a6439ec,0x8cc70208
.long	0x23631e28,0x90befffa
.long	0x23631e28,0x90befffa
.long	0xde82bde9,0xa4506ceb
.long	0xde82bde9,0xa4506ceb
.long	0xb2c67915,0xbef9a3f7
.long	0xb2c67915,0xbef9a3f7
.long	0xe372532b,0xc67178f2
.long	0xe372532b,0xc67178f2
.long	0xea26619c,0xca273ece
.long	0xea26619c,0xca273ece
.long	0x21c0c207,0xd186b8c7
.long	0x21c0c207,0xd186b8c7
.long	0xcde0eb1e,0xeada7dd6
.long	0xcde0eb1e,0xeada7dd6
.long	0xee6ed178,0xf57d4f7f
.long	0xee6ed178,0xf57d4f7f
.long	0x72176fba,0x06f067aa
.long	0x72176fba,0x06f067aa
.long	0xa2c898a6,0x0a637dc5
.long	0xa2c898a6,0x0a637dc5
.long	0xbef90dae,0x113f9804
.long	0xbef90dae,0x113f9804
.long	0x131c471b,0x1b710b35
.long	0x131c471b,0x1b710b35
.long	0x23047d84,0x28db77f5
.long	0x23047d84,0x28db77f5
.long	0x40c72493,0x32caab7b
.long	0x40c72493,0x32caab7b
.long	0x15c9bebc,0x3c9ebe0a
.long	0x15c9bebc,0x3c9ebe0a
.long	0x9c100d4c,0x431d67c4
.long	0x9c100d4c,0x431d67c4
.long	0xcb3e42b6,0x4cc5d4be
.long	0xcb3e42b6,0x4cc5d4be
.long	0xfc657e2a,0x597f299c
.long	0xfc657e2a,0x597f299c
.long	0x3ad6faec,0x5fcb6fab
.long	0x3ad6faec,0x5fcb6fab
.long	0x4a475817,0x6c44198c
.long	0x4a475817,0x6c44198c
.long	0,0
.long	0,0
.long	0x14151617,0x10111213
.long	0x04050607,0x00010203

#endif
